package demo.easyexecl.handler.cell;

import com.alibaba.excel.metadata.data.DataFormatData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;

/**
 * 设置每列单独的单元格样式
 *
 * @author 别人
 * @link <a href="https://blog.csdn.net/weixin_44730166/article/details/131193158"/>
 */
public class EachColumnCellStyleStrategy implements CellWriteHandler {

    private String cellStyle;    //49:0，49表示单元格格式的序号，0表示第几列，可以传多个，用逗号隔开

    //从生成的时候通过传参进来动态设置某一列的 单元格格式
    public EachColumnCellStyleStrategy(String cellStyle) {
        this.cellStyle = cellStyle;
    }

    @Override
    public void afterCellDispose(CellWriteHandlerContext context) {
        if (StringUtils.isBlank(cellStyle)) {
            return;
        }
        String[] cellStyleSplit = cellStyle.split(",");
        WriteCellData<?> cellData = context.getFirstCellData();
        // 设置单元格格式
        for (String style : cellStyleSplit) {
            String[] styleSplit = style.split(":");
            //判断第几列设置格式 从0开始数
            if (context.getColumnIndex().equals(Integer.valueOf(styleSplit[1]))) {
                WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
                DataFormatData dataFormatData = new DataFormatData();
                //设置什么类型的格式，可以搜索easyExcel的格式代表的序号去设置(49为 “文本” 格式)
                dataFormatData.setIndex(Short.valueOf(styleSplit[0]));
                writeCellStyle.setDataFormatData(dataFormatData);
                return;
            }
        }
    }


}
